<?php

namespace App\Http\Utils\Aip;

/*
 * Copyright (c) 2017 Baidu.com, Inc. All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * Http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

/**
 * 百度语音
 */
class AipSpeech extends AipBase
{

    /**
     * url
     *
     * @var string
     */
    public $asrUrl = 'http://vop.baidu.com/server_api';

    /**
     * url
     *
     * @var string
     */
    public $ttsUrl = 'http://tsn.baidu.com/text2audio';

    /**
     *
     * @param string $speech
     * @param string $format
     * @param int $rate
     * @param array $options
     * @return array
     */
    public function asr($speech, $format, $rate, $options = array())
    {
        $data = array();

        if (!empty ($speech)) {
            $data ['speech'] = base64_encode($speech);
            $data ['len'] = strlen($speech);
        }

        $data ['format'] = $format;
        $data ['rate'] = $rate;
        $data ['channel'] = 1;

        $data = array_merge($data, $options);

        return $this->request($this->asrUrl, $data, array());
    }

    /**
     *
     * @param string $text
     * @param string $lang
     * @param int $ctp
     * @param array $options
     * @return array
     */
    public function synthesis($text, $lang = 'zh', $ctp = 1, $options = array())
    {
        $data = array();

        $data ['tex'] = $text;
        $data ['lan'] = $lang;
        $data ['ctp'] = $ctp;

        $data = array_merge($data, $options);

        $result = $this->request($this->ttsUrl, $data, array());

        if (!isset ($result ['err_no'])) {
            return $result ['content'];
        }

        return $result;
    }

    /**
     * 判断认证是否有权限
     *
     * @param array $authObj
     * @return boolean
     */
    protected function isPermission($authObj)
    {
        return true;
    }

    /**
     * 处理请求参数
     *
     * @param string $url
     * @param array $params
     * @param array $data
     * @param array $headers
     */
    protected function proccessRequest($url, &$params, &$data, $headers)
    {
        $token = isset ($params ['access_token']) ? $params ['access_token'] : '';
        $data ['cuid'] = md5($token);

        if ($url === $this->asrUrl) {
            $data ['token'] = $token;
            $data = json_encode($data);
        } else {
            $data ['tok'] = $token;
        }

        unset ($params ['access_token']);
    }

    /**
     * 格式化结果
     *
     * @param $content string
     * @return mixed
     */
    protected function proccessResult($content)
    {
        $obj = json_decode($content, true);

        if ($obj === null) {
            $obj = array(
                'content' => $content
            );
        }

        return $obj;
    }
}
